// 用户认证工具函数
import request from "./request.js";
import { API_ENDPOINTS } from "./api.js";

// 保存用户信息到localStorage
// 注意：只保存用户对象，不要保存整个响应
export const saveUserInfo = (userInfo) => {
  localStorage.setItem("user_info", JSON.stringify(userInfo));
};

// 保存认证token到localStorage
export const saveAuthToken = (token) => {
  localStorage.setItem("auth_token", token);
};

// 获取用户信息
export const getUserInfo = () => {
  try {
    return JSON.parse(localStorage.getItem("user_info") || "{}");
  } catch (error) {
    console.error("获取用户信息失败:", error);
    return {};
  }
};

// 获取认证token
export const getAuthToken = () => {
  return localStorage.getItem("token");
};

// 获取当前用户ID
export function getCurrentUserId() {
  return localStorage.getItem("userid") || "";
}

// 检查用户是否已登录
export const isLoggedIn = () => {
  const token = getAuthToken();
  const userInfo = getUserInfo();
  const userId = getCurrentUserId();
  // 修复：只要有token和userid就认为已登录，不强制要求user_info.id
  return !!(token && userId);
};

// 清除用户认证信息
export const clearAuth = () => {
  localStorage.removeItem("auth_token");
  localStorage.removeItem("user_info");
};

// 用户登录
export const login = async (username, password) => {
  try {
    const response = await request.post(API_ENDPOINTS.USER.LOGIN, {
      username,
      password,
    });
    // 修正：后端返回结构为 { code, msg, data: { token, user } }
    const { token, user } = response.data.data;
    // 保存认证信息
    saveAuthToken(token);
    saveUserInfo(user); // 只保存user对象
    return { success: true, user };
  } catch (error) {
    console.error("登录失败:", error);
    throw error;
  }
};

// 用户登出
export const logout = async () => {
  try {
    // 调用后端登出API
    await request.post(API_ENDPOINTS.USER.LOGOUT);
  } catch (error) {
    console.error("登出API调用失败:", error);
  } finally {
    // 清除本地认证信息
    clearAuth();
  }
};

// 获取用户资料
export const getUserProfile = async () => {
  try {
    const response = await request.get(API_ENDPOINTS.USER.PROFILE);
    const userInfo = response.data.data; // 只取data字段
    // 更新本地用户信息
    saveUserInfo(userInfo);
    return userInfo;
  } catch (error) {
    console.error("获取用户资料失败:", error);
    throw error;
  }
};

// 检查token是否有效
export const checkAuthStatus = async () => {
  if (!isLoggedIn()) {
    return false;
  }

  try {
    // 尝试获取用户资料，如果失败则只检查本地token
    await getUserProfile();
    return true;
  } catch (error) {
    console.warn("获取用户资料失败，但本地token存在，继续使用:", error);
    // 不立即清除认证信息，给用户一个机会
    return true;
  }
};
